/*
 * @Copyright: 2017 www.yyfax.com Inc. All rights reserved.
 */
package com.yyfax.pay.order.data.service;

import com.yyfax.pay.order.model.po.UserAuthPO;
import com.yyfax.pay.order.model.vo.UserAuthVO;

/**
 * 用户认证信息服务接口
 *
 * @author buyi
 * @date 2017-04-12 11:09:15
 * @since 1.0.0
 */
public interface UserAuthService {
	/**
	 * 根据主键查询实体
	 *
	 * @param id 主鍵
	 * @param merchantCode 商户编号(分表预留参数)
	 * @return UserAuthPO
	 * @throws Exception 异常
	 * @author buyi
	 * @date 2017年4月3日上午1:28:16
	 * @since 1.0.0
	 */
	UserAuthPO queryByIdAndMerchantCode(int id, String merchantCode) throws Exception;

	/**
	 * 查询用户实名认证信息
	 *
	 * @param userId 用户id
	 * @param merchantCode 商户id
	 * @return UserAuthPO
	 * @throws Exception 异常
	 * @author buyi
	 * @date 2017-04-17 10:17:50
	 * @since v1.0.0
	 */
	UserAuthPO queryByUserIdAndMerchantCode(String userId, String merchantCode);

	/**
	 * 查询用户实名认证信息
	 *
	 * @param merchantCode 商户号
	 * @param idNo 身份证号
	 * @return UserAuthPO
	 * @throws Throwable 异常
	 * @author buyi
	 * @date 2017-04-19 11:46:15
	 * @since v1.0.0
	 */
	UserAuthPO queryByMerchanCodeAndIdNo(String merchantCode, String idNo) throws Throwable;

	/**
	 * 校验身份证号是否被使用
	 *
	 * @param merchantCode 商户号
	 * @param userId 用户id
	 * @param idNo 身份证号，明文
	 * @param name 姓名
	 * @throws Throwable 如果证件号被占用，或者证件号码和姓名和已有的实名鉴权信息不一致，则抛出异常
	 * @author buyi
	 * @date 2017-04-19 11:56:37
	 * @since v1.0.0
	 */
	void checkIdNoAndName(String merchantCode, String userId, String idNo, String name) throws Throwable;

	/**
	 * 保存实体对象
	 *
	 * @param po 实体对象
	 * @return String 返回业务主键
	 * @throws Exception 异常
	 * @author buyi
	 * @date 2017年4月3日上午1:28:22
	 * @since 1.0.0
	 */
	String saveAndReturnUserAuthId(UserAuthPO po) throws Exception;

	/**
	 * 保存用户鉴权信息
	 *
	 * @param merchantCode 商户号
	 * @param userId 用户id
	 * @param idNo 身份证号
	 * @param name 项目
	 * @param paymentCode 支付编码
	 * @param bankCode 银行换号
	 * @param bankName 银卡名称
	 * @param cardNo 卡号
	 * @param phone 银行预留手机号
	 * @param userPaymentExt 用户支付通道鉴权扩展字段
	 * @return int
	 * @throws Throwable 异常
	 * @author buyi
	 * @date 2017-04-19 20:50:11
	 * @since v1.0.0
	 */
	public int save(String merchantCode, String userId, String idNo, String name, String paymentCode, String bankCode, String bankName, String cardNo,
			String phone, String userPaymentExt) throws Throwable;

	/**
	 * 查询用户鉴权信息<br>
	 * 只返回用户支付认证有效的信息
	 *
	 * @param merchantCode 商户编号
	 * @param userId 商户用户ID
	 * @return UserAuthVO
	 * @throws Exception 异常
	 * @author buyi
	 * @date 2017-04-17 10:15:06
	 * @since v1.0.0
	 */
	UserAuthVO queryUserAuthVO(String merchantCode, String userId) throws Exception;

	/**
	 * 通过四要素(身份证号、手机号、卡号、姓名) 验证用户是否开户成功
	 *
	 * @param merchantCode 商户号
	 * @param userRegisterReq 开户请求参数
	 * @return Boolean
	 * @author liangqm,buyi
	 * @date 2018-01-10 10:15:06
	 * @since v2.0.7
	 */
	public boolean checkUserOpenSuccess(String merchantCode, String userId, String name, String idNoCip, String cardNoCip, String phone);

	public int insert(UserAuthPO userAuthPO);
}
